package tests;

import java.util.List;

import org.junit.Test;

import AlgoritmosGeneticos.model.Individuo;
import AlgoritmosGeneticos.model.OperadorCruce;
import AlgoritmosGeneticos.model.impl.IndividuoImpl;
import AlgoritmosGeneticos.model.impl.cruces.CruceAnular;
import AlgoritmosGeneticos.model.impl.cruces.CruceMultiple;
import AlgoritmosGeneticos.model.impl.cruces.CruceSegmentado;

public class TestCruces {

	/**
	 *  Cristian fijate que podes agrupar los test por categorías, así podés
	 *  correr todos los test juntos de un mismo ambito, entonces es todo más 
	 *  organizado
	 */
	
	@Test
	public void testCruceAnular() {
		OperadorCruce cruce = new CruceAnular();
		Individuo ind1 = new IndividuoImpl("111111111111", 0.2);
		Individuo ind2 = new IndividuoImpl("000000000000", 0.2);
		
		List<Individuo> lista = cruce.cruzar(ind1, ind2);
		System.out.println("hijo1: " + lista.get(0).getNumenoBinario());
		System.out.println("hijo2: " + lista.get(1).getNumenoBinario());
	}
	
	@Test
	public void testCruceMultiple() {
		OperadorCruce  cruce= new CruceMultiple();
		Individuo ind1 = new IndividuoImpl("111111111111", 0.2);
		Individuo ind2 = new IndividuoImpl("000000000000", 0.2);
		
		List<Individuo> lista = cruce.cruzar(ind1, ind2);
		System.out.println("hijo1: " + lista.get(0).getNumenoBinario());
		System.out.println("hijo2: " + lista.get(1).getNumenoBinario());
	}
	
	@Test
	public void testCruceSegmentado() {
		OperadorCruce cruce = new CruceSegmentado();
		
		Individuo ind1 = new IndividuoImpl("111111111111", 0.2);
		Individuo ind2 = new IndividuoImpl("000000000000", 0.2);
		
		List<Individuo> lista = cruce.cruzar(ind1, ind2);
		System.out.println("hijo1: " + lista.get(0).getNumenoBinario());
		System.out.println("hijo2: " + lista.get(1).getNumenoBinario());
	}
}
